package org.softmed.rest.admin.guice;

import org.softmed.action.manager.ActionManager;
import org.softmed.persistence.PersistenceManager;
import org.softmed.persistence.PersistenceManagerProvider;
import org.softmed.rest.admin.aop.Aspect;
import org.softmed.rest.admin.aop.Rule;
import org.softmed.rest.admin.aop.manager.AOPFacade;
import org.softmed.rest.admin.aop.manager.AOPManager;
import org.softmed.rest.admin.aop.manager.CustomActionManager;
import org.softmed.rest.server.core.guice.NamedAnnotation;

import com.google.inject.Binder;
import com.google.inject.Module;

public class AdminModule implements Module {

//	String aspectProviderName = "aop-provider";
//	String aspectModuleURI = "aop";
//	String aspectPackage = "org.softmed.rest.admin.aop";
//
//	String restAdminProviderName = "rest-admin-provider";
//	String restAdminModuleURI = "rest";
//	String restAdminPackage = "org.softmed.rest.config";

	public AdminModule() {

	}


	@Override
	public void configure(Binder binder) {

//		binder.bindConstant().annotatedWith(
//				new NamedAnnotation("AspectProviderName")).to(
//				aspectProviderName);
//
//		binder.bindConstant().annotatedWith(
//				new NamedAnnotation("AspectModuleURI")).to(aspectModuleURI);
//
//		binder.bindConstant().annotatedWith(
//				new NamedAnnotation("AspectPackage")).to(aspectPackage);
//
//		binder.bindConstant().annotatedWith(
//				new NamedAnnotation("RESTAdminProviderName")).to(
//				restAdminProviderName);
//
//		binder.bindConstant().annotatedWith(
//				new NamedAnnotation("RestAdminModuleURI")).to(
//				restAdminModuleURI);
//
//		binder.bindConstant().annotatedWith(
//				new NamedAnnotation("RestAdminPackage")).to(restAdminPackage);

		binder.bind(AOPManager.class).toInstance(new AOPManager());
		binder.requestStaticInjection(AOPFacade.class);


		binder.bind(ActionManager.class).toInstance(
				new CustomActionManager());

	}

//	public void createAOPDatabase() throws Throwable {
//		PersistenceManagerProvider provider = new PersistenceManagerProvider(
//				aspectProviderName);
//		PersistenceManager manager = provider.getPersistenceManager();
//		manager.connect();
//
//		// create aspect to refresh AOP framework
//		Aspect aa = new Aspect();
//
//		Rule rule = new Rule();
//		rule.getApplicationURIs().add("admin");
//		rule.getModuleURIs().add("rest");
//		rule.getHttpMethodNames().add("POST");
//		rule.getHttpMethodNames().add("PUT");
//		rule.getHttpMethodNames().add("DELETE");
//
//		aa.getRules().add(rule);
//
//		aa.getAdvice().setAfter("services.administration.aop.refresh-rest");
//
//		manager.store(aa);
//
//		// create aspect to refresh REST configuration
//		// as defined in REST Admin specification
//		aa = new Aspect();
//
//		rule = new Rule();
//		rule.getApplicationURIs().add("admin");
//		rule.getModuleURIs().add("aop");
//		rule.getHttpMethodNames().add("POST");
//		rule.getHttpMethodNames().add("PUT");
//		rule.getHttpMethodNames().add("DELETE");
//
//		aa.getRules().add(rule);
//
//		aa.getAdvice().setAfter("services.administration.aop.refresh-aop");
//
//		manager.store(aa);
//
//		manager.close();
//	}


}
